Test automation systems are used to automatically test software. Software testing using an automatic test program generally avoids the errors that humans make when they tire after multiple repetitions. For example, the automation test program provides consistent test execution and does not skip or add any tests by mistake. The test program can perform the functions much quicker then a normal human being using the product, and record the results of the test accurately. The results are automatically fed into a database that may provide useful statistics on how well the software development process is going.
Currently, for most software projects, thorough automation is not even executed before developers check in their code. Automation has been traditionally limited to testing code after it has been checked in due to time constraints related to testing code changes before they are checked in.
Automation testing also becomes problematic for large-scale software development projects. As the project size increases, the time required to run the automation lengthens. At a certain point, the time required to run the automation is so long that running the automation for the code changes has become prohibitively time consuming. Large-scale software development projects may have numerous developers making code changes that affect code in other parts of the project. Without comprehensive testing of each of the code changes, the software project may take on bugs and errors in one area that impacts one or more related areas. The late cycle discovery of the dependencies introduces project delays because of the time required to back out the problematic code. What is needed is a system that provides automation testing over a relatively shorter period of time as changes to code are made and submitted by developers before the code is checked in.